
#include <string>
#include <iostream>
#include <vector>
using namespace std;
//容器 vector 动态数组
void my_vector()
{
	vector<int> v;
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	cout << "length:" << v.size() << endl;
	//遍历
	while (v.size() > 0)
	{
		cout << v.back() << " ";//获取尾部元素
		v.pop_back();//移除尾部元素
	}
	cout << "size:" << v.size() << endl;
	//font()函数取首部元素,返回的是该元素的引用,所以可以直接修改元素的值
	v.push_back(23);
	v.push_back(34);
	v.front() = 12;//改变元素的值
	cout << v.front() << endl;

}
/*
1、resize(n)

调整容器的长度大小，使其能容纳n个元素。

如果n小于容器的当前的size，则删除多出来的元素。

否则，添加采用值初始化的元素。

2、 resize(n，t)

多一个参数t，将所有新添加的元素初始化为t。



而reserver()的用法只有一种

reserve(n)

预分配n个元素的存储空间。
*/

//vector的初始化
void init_vector()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	vector<int> v2 = v1;
	vector<int> v3(3, 45);//3个45
	for (int i = 0; i < v3.size(); i++)
	{
		cout << v3[i] << " ";
	}
}
//遍历函数
template <typename T>
void print_vector(vector<T> &v)
{
	cout << "数组遍历:" << endl;
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	cout << "迭代器遍历:" << endl;
	for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
	{
		cout << *iter << " ";
	}
	//v.front() = 34;//改变元素的值,传的是引用，实参本身会被修改
}
//遍历
void bianli_vector()
{
	vector<int> v1(10);//大小为10,默认是0
	/*
    for (int i = 0; i < v1.size(); i++)
    {
    v1[i] = i + 1;
    }*/
	v1.push_back(23);
	v1.push_back(45);//23，45在尾部
	print_vector<int>(v1);

	//cout <<"\n"<< v1.front() << endl;//34
}
//堆内存
void heap_vector()
{
	vector<int> *pv = new vector<int>(10);
	cout << "size:" << pv->size() << endl;
	for (int i = 0; i < pv->size(); i++)
	{
		(*pv)[i] = i;
	}
	print_vector<int>(*pv);
	delete(pv);
}

//删除元素
void delete_vector()
{
	vector<int> v1(10);
	for (int i = 0; i < v1.size(); i++)
	{
		v1[i] = i;
	}
	//v1.erase(v1.begin(),v1.begin() + 3);//区间删除
	//v1.erase(v1.begin());//删除头部
	//根据元素值删除
	for (vector<int> ::iterator it = v1.begin(); it != v1.end();)
	{
		if (*it == 2)
		{
			it = v1.erase(it);//删除时，返回下一个元素的指针(让迭代器指向下一个元素)
		}
		else
		{
			it++;
		}
	}
	print_vector(v1);
}

//插入元素
void insert_vector()
{
	vector<int> v1(10);
	v1.insert(v1.begin(), 20);
	v1.insert(v1.end(), 80);
	print_vector(v1);
}
int main2()
{
	//my_vector();
	//init_vector();
	//bianli_vector();
	//heap_vector();
	//delete_vector();
	insert_vector();
	system("pause");
	return 0;
}
